namespace HumanElement.KungFu.CommandConsole
{
    /// <summary>
    /// <c>public interface ICommand<TCommandType, TCommandProcessor> : ICommand<TCommandType></c>
    /// </summary>
    /// <typeparam name="TCommandType">The type of the command type.</typeparam>
    /// <typeparam name="TCommandProcessor">The type of the command processor.</typeparam>
    public interface ICommand<TCommandType, TCommandProcessor> : ICommand<TCommandType>
    {
        /// <summary>
        /// Gets the processor.
        /// </summary>
        /// <value>The processor.</value>
        TCommandProcessor Processor { get; }

    }

    public interface ICommand<TCommandType>
    {
        /// <summary>
        /// Gets the artifact.
        /// </summary>
        /// <value>The artifact.</value>
        string Artifact { get; }

        /// <summary>
        /// Gets the name.
        /// </summary>
        /// <value>The name.</value>
        string Name { get; }

        /// <summary>
        /// Gets the arg.
        /// </summary>
        /// <value>The arg.</value>
        string Arg { get; }

        /// <summary>
        /// Gets the command value.
        /// </summary>
        /// <value>The command value.</value>
        TCommandType CommandValue { get; }

    }
}